// vite-plugin-pre-build.js
import fs from 'fs';
import path from 'path';
import LoaderUtils from './utils/readJson';
import sourceSet from './source-set';
import dayjs from 'dayjs';

const pluginName = 'vite-plugin-prebuild';
const pagesJsonPath = path.resolve(process.cwd(), 'src/pages.json');
// const pagesJsPath = path.resolve(process.cwd(), 'src/pages.js')
let timer = null;
let config = {
  openSyncAndroidStudio: false
}
export default function (opts) {
  if (opts) Object.assign(config, opts);
  // preBuildTasks(config);
  return {
    name: pluginName,
    async configResolved() {
      const env = opts.env;
      sourceSet(env).addFontScss();
    },
    async buildStart(options) {
      // 在这里可以执行一些构建开始前的任务
      // console.log('构建开始前的准备...');
    },
    configureServer(server) {
      // 监听文件变化
      server.watcher.on('all', (event, fileName) => {
        if (fileName === pagesJsonPath) {
          console.log(`${event}Detected change in ${pagesJsonPath}.`);
          // 重新执行预构建任务
          // preBuildTasks(server.config);
        }
      });
    },
    // 编译结束后，如果运行的是 dev:app 命令，则执行一个本地脚本
    async buildEnd() {
      if (!config.openSyncAndroidStudio) return;
      console.log('编译结束', process.env.COMMAND || '');
      if (process.env.COMMAND === 'dev:app') {
        clearTimeout(timer);
        copyResourceFiles();
      }
    }
  };
};

/**
 * 自定义的预构建任务
 */
// async function preBuildTasks(viteConfig) {
//   // 在这里可以执行一些初始化工作，例如注册监听器、预加载资源等
//   console.log('开始预构建任务...');

//   // 执行预构建任务

//   try {
//     // -------------------------
//     // 任务1. 同步生成 pages.js
//     // -------------------------
//     // 读取 pages.json 文件
//     const pagesData = LoaderUtils.readJsonFile(pagesJsonPath); // 替换成你的 pages.json 路径

//     // 将 pagesData 转换为 JavaScript 模块内容
//     const jsContent =
//       "/**\n"
//       + "* 此文件由 vite-plugin-prebuild 自动生成, 修改 pages.json 时会动态修改此文件\n"
//       + `* lastEditTime: ${new Date().toLocaleDateString()}\n`
//       + "*/\n"
//       + "export default () => {"
//       // + `return ${JSON.stringify(pagesData, null, 2)}`
//       + `return ${JSON.stringify(pagesData)}`
//       + "};"

//     // 写入 pages.js 文件
//     await fs.promises.writeFile(pagesJsPath, jsContent);
//     console.log(`[${pluginName}] 已写入同步文件 pages.js`);
//   } catch (error) {
//     console.error('Error generating pages.js:', error);
//   }
// }


// 复制资源文件
function copyResourceFiles() {
  // 执行本地 .ps1 脚本
  const { exec } = require('child_process');
  console.log(`正在更新 Android Studio APP 资源...`);
  timer = setTimeout(() => {
    exec('powershell -ExecutionPolicy Bypass -File .\\copy_and_delete.ps1', (error, stdout, stderr) => {
      if (error) {
        console.error(`执行更新脚本时出错: ${error}`);
        return;
      }
      console.log(`[${dayjs().format('YYYY-MM-DD HH:mm:ss')}]更新资源完成，请到 Android Studio 执行 Run App !`);
    });
  }, 5000);
}